package com.navi.core.repository;

import com.navi.bean.sql.SqlVo;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.Pageable;

import javax.persistence.EntityManager;
import java.util.List;
import java.util.Map;

/**
 * 数据访问接口
 */
public interface LKingRepository {

    /**
     * 获取EntityManager
     * @return EntityManager
     */
    public EntityManager getEntityManager();


    /**
     * 查询列表
     * @param <T> 返回值类型为clazz参数定义的类型
     * @param sqlVo 查询对象
     * @param clazz 查询结果映射对象
     * @param allMappingAliases 是否全映射
     * @return 列表
     */
    public <T> List<T> queryListBySql(SqlVo sqlVo, Class<T> clazz, boolean allMappingAliases);


    /**
     * 查询列表
     * @param <T> 返回值类型为clazz参数定义的类型
     * @param sqlVo 查询对象
     * @param clazz 查询结果映射对象
     * @return 列表
     */
    public <T> List<T> queryListBySql(SqlVo sqlVo, Class<T> clazz);


//    /**
//     * 查询列表
//     * @param sqlVo 查询列表
//     * @return 列表
//     */
//    public List<Map<String, Object>> queryListMapBySql(SqlVo sqlVo);
//
//
//    /**
//     * 查询分页
//     * @param <T> 返回值类型为clazz参数定义的类型
//     * @param sqlVo 查询对象
//     * @param clazz 查询结果映射对象
//     * @param pageable 分页信息
//     * @param allMappingAliases 是否全映射
//     * @return 分页
//     */
//    public <T> Page<T> queryPageBySql(SqlVo sqlVo, Class<T> clazz, Pageable pageable, boolean allMappingAliases);
//
//
//    /**
//     * 查询分页
//     * @param <T> 返回值类型为clazz参数定义的类型
//     * @param sqlVo 查询对象
//     * @param clazz 查询结果映射对象
//     * @param pageable 分页信息
//     * @return 分页
//     */
//    public <T> Page<T> queryPageBySql(SqlVo sqlVo, Class<T> clazz, Pageable pageable);
//
//
//    /**
//     * 查询分页
//     * @param sqlVo 查询分页对象
//     * @param pageable 分页信息
//     * @return 分页
//     */
//    public Page<Map<String, Object>> queryPageMapBySql(SqlVo sqlVo, Pageable pageable);
//
//
//    /**
//     * 获取对象
//     * @param <T> 返回值类型为clazz参数定义的类型
//     * @param sqlVo 查询条件对象
//     * @param clazz 查询结果映射对象
//     * @param allMappingAliases 是否全映射
//     * @return 对象
//     */
//    public <T> T queryOneBySql(SqlVo sqlVo, Class<T> clazz, boolean allMappingAliases);
//
//
//    /**
//     * 获取对象
//     * @param <T> 返回值类型为clazz参数定义的类型
//     * @param sqlVo 查询条件对象
//     * @param clazz 查询结果映射对象
//     * @return 对象
//     */
//    public <T> T queryOneBySql(SqlVo sqlVo, Class<T> clazz);
//
//
//    /**
//     * 获取对象
//     * @param sqlVo 查询条件对象
//     * @return 对象
//     */
//    public Map<String, Object> queryOneMapBySql(SqlVo sqlVo);
//
//
//    /**
//     * 获取字符串（必须使用select count(1) as one from t的形式）
//     * @param sqlVo 查询条件对象
//     * @return 字符串
//     */
//    public String queryStringBySql(SqlVo sqlVo);
//
//
//    /**
//     * 获取数字（必须使用select count(1) as one from t的形式）
//     * @param sqlVo 查询条件对象
//     * @return 字符串
//     */
//    public Long queryLongBySql(SqlVo sqlVo);
//
//
//    /**
//     * 获取数字（必须使用select count(1) as one from t的形式）
//     * @param sqlVo 查询条件对象
//     * @return 字符串
//     */
//    public long querylongBySql(SqlVo sqlVo);
//
//
//    /**
//     * 获取字符串（必须使用select count(1) as key from t的形式）
//     * @param sqlVo 查询条件对象
//     * @param key 映射的key
//     * @return 字符串
//     */
//    public String queryStringBySql(SqlVo sqlVo, String key);
//
//
//    /**
//     * 获取数字（必须使用select count(1) as key from t的形式）
//     * @param sqlVo 查询条件对象
//     * @param key 映射的key
//     * @return 字符串
//     */
//    public Long queryLongBySql(SqlVo sqlVo, String key);
//
//
//    /**
//     * 获取数字（必须使用select count(1) as key from t的形式）
//     * @param sqlVo 查询条件对象
//     * @param key 映射的key
//     * @return 字符串
//     */
//    public long querylongBySql(SqlVo sqlVo, String key);
//
//
//    /**
//     * 执行更新
//     * @param sqlVo 更新条件对象
//     * @return 影响的条数
//     */
//    public int executeUpdateBySql(SqlVo sqlVo);
//
//
//    /**
//     * 查询列表
//     * @param <T> 返回值类型为clazz参数定义的类型
//     * @param sqlVo 查询对象
//     * @param clazz 查询结果映射对象
//     * @return 列表
//     */
//    public <T> List<T> findListByHql(SqlVo sqlVo, Class<T> clazz);
//
//
//    /**
//     * 查询分页
//     * @param <T> 返回值类型为clazz参数定义的类型
//     * @param sqlVo 查询对象
//     * @param clazz 查询结果映射对象
//     * @param pageable 分页信息
//     * @return 分页
//     */
//    public <T> Page<T> findPageByHql(SqlVo sqlVo, Class<T> clazz, Pageable pageable);
//
//
//    /**
//     * 获取对象
//     * @param <T> 返回值类型为clazz参数定义的类型
//     * @param sqlVo 查询条件对象
//     * @param clazz 查询结果映射对象
//     * @return 对象
//     */
//    public <T> T findOneByHql(SqlVo sqlVo, Class<T> clazz);
//
//
//    /**
//     * 获取对象
//     * @param <T> 返回值类型为clazz参数定义的类型
//     * @param clazz 查询结果映射对象
//     * @param id 主键
//     * @return 对象
//     */
//    public <T> T findOneById(Class<T> clazz, String id);
//
//
//    /**
//     * 保存对象
//     * @param <T> 返回值类型为clazz参数定义的类型
//     * @param obj 对象
//     * @param merge true：调用merge方法；false：调用persist方法。
//     * @return 对象
//     */
//    public <T> T save(Object obj, boolean merge);
//
//
//    /**
//     * 保存对象（merge方法）
//     * @param <T> 返回值类型为clazz参数定义的类型
//     * @param obj 对象
//     * @return 对象
//     */
//    public <T> T save(Object obj);
//
//
//    /**
//     * 保存对象
//     * @param <T> 返回值类型为clazz参数定义的类型
//     * @param obj 对象
//     * @return 对象
//     */
//    public <T> T merge(Object obj);
//
//
//    /**
//     * 保存对象
//     * @param <T> 返回值类型为clazz参数定义的类型
//     * @param obj 对象
//     * @return 对象
//     */
//    public <T> T persist(Object obj);
//
//
//    /**
//     * 删除对象
//     * @param obj 对象
//     */
//    public void remove(Object obj);


}